package com.azt.api.service;

//git.oschina.net/azt365/azt-server-user.git
import java.util.List;
import java.util.Map;

import com.azt.api.pojo.Authority;
import com.azt.api.pojo.Company;
import com.azt.api.pojo.Role;
import com.azt.api.pojo.UserFunction;
import com.azt.model.easy.EasyTree;


/** 
 * @ClassName: FunctionService 主要对权限功能查询操作的接口  部分是公共方法
 * @Description: TODO
 * @author: zhaheng
 * @date: 2016年9月2日 上午10:51:39  
 */
public interface FunctionService {

	/**
	 * @description 权限树数据
	 * @return
	 * @author 查恒  2016年8月12日上午10:00:46
	 */
	List<EasyTree> getFuncTree();

	/**
	 * @description 保存或更新
	 * @param ufunc
	 * @author 查恒  2016年8月12日上午10:00:58
	 */
	void saveOrUpdate(UserFunction ufunc);

	/**
	 * @description 根据权限ID查权限  带出子类关联
	 * @param id
	 * @return
	 * @author 查恒  2016年8月12日上午10:00:17
	 */
	UserFunction getFuncById(Integer id);
	
	/**
	 * @description 根据功能类别的参数取得所有功能左侧或顶部菜单
	 * @return
	 * @author 查恒  2016年8月19日上午10:00:52
	 */
	UserFunction getFuncByParameterMap(Map<String, Object> ParameterMap);

	/**
	 * @description 根据角色ID查用户权限 --可公用方法
	 * @param roleId
	 * @return
	 * @author 查恒  2016年8月12日上午10:00:00
	 */
	List<Authority> getAuthorityByRoleId(Integer roleId);

	/**
	 * @description 根据角色ID取得用户权限并且根据功能参数筛选 --可公用方法
	 * @param roleId
	 * @param ParameterMap  u_function表的参数Map集合
	 * @return
	 * @author 查恒  2016年8月19日上午10:04:44
	 */
	List<Authority> getAuthorityByRoleIdAndFunc(Integer roleId,Map<String,Object> ParameterMap);
	
	/**
	 * @description 用户ID取权限角色关联表  --可公用方法	
	 * @param userId roleType  对应用户的id和用户的身份类别
	 * @return
	 * @author 查恒  2016年8月12日上午9:59:28
	 */
	List<Authority> getAuthorityByUserId(Integer userId,Integer roleType);
	
	/**
	 * @description 根据用户ID取得权限并全额根据功能参数筛选 --可公用方法
	 * @param userId
	 * @param roleType
	 * @param ParameterMap
	 * @return
	 * @author 查恒  2016年8月19日上午10:40:56
	 */
	List<Authority> getAuthorityByUserIdAndFunc(Integer userId,Integer roleType,Map<String,Object> ParameterMap);


	/** 
	 * @Title: 得到所有的父类节点
	 * @Description: TODO
	 * @return
	 * @return: List<UserFunction>
	 * @author: 查恒 2016年9月2日 上午10:52:33 
	 */
	List<UserFunction> getAllParentFunction();

    
	/**
	 * @description 根据角色id删除所有的权限角色关联表
	 * @param roleId
	 * @author 查恒  2016年8月10日下午11:41:22
	 */
	void delAuthorityByRoleId(Integer roleId);
	
	/**
	 * @description 保存权限角色关系表
	 * @param ua
	 * @author 查恒  2016年8月10日下午11:57:19
	 */
	void saveAuthority(Authority ua);
	
	/** 
	 * @Title: createAuthority 
	 * @Description: 创建权限菜单
	 * @param roleId
	 * @param functionId
	 * @return
	 * @return: Authority
	 * @author: 查恒 2016年10月19日 下午5:01:35 
	 */
	Authority createAuthority(Integer roleId, Integer functionId);

	/** 
	 * @Title: createBranchAuthority 
	 * @Description:创建分公司权限菜单
	 * @param id
	 * @param functionMap
	 * @return: void
	 * @author: 查恒 2016年10月20日 下午4:00:56 
	 */
	 void createBranchAuthority(int roleId, Map<String, String[]> functionMap);

	/** 
	 * @Title: loadMenuTree 
	 * @Description: 根据权限拿菜单
	 * @param intValue
	 * @param value
	 * @param showType
	 * @return
	 * @return: List<UserFunction>
	 * @author: 查恒 2016年10月21日 上午10:38:13 
	 */
	List<UserFunction> loadMenuTree(Company company,Role currentRole, int value, int showType);

	
	/** 
	 * @Title: findFunc 
	 * @Description: 根据类别查询菜单
	 * @param type
	 * @param showType
	 * @return
	 * @return: List<UserFunction>
	 * @author: 查恒 2016年10月31日 下午1:31:08 
	 */
	List<UserFunction> findFunc(int type, int showType);
	
	/** 
	 * @Title: findFuncByRoleId 
	 * @Description: 根据条件拿到数据
	 * @param intValue
	 * @param value
	 * @param value2
	 * @return
	 * @return: List<UserFunction>
	 * @author: 查恒 2016年10月21日 下午5:08:23 
	 */
	List<UserFunction> findFuncByRoleId(int roleId, int type, int showType);

	/** 
	 * @Title: markTree 
	 * @Description: 标记菜单
	 * @param parentTree
	 * @param branchTree
	 * @return: void
	 * @author: 查恒 2016年10月21日 下午5:16:17 
	 */
	List<UserFunction> markTree(List<UserFunction> parentTree, List<UserFunction> branchTree);

	/** 
	 * @Title: getParFunByCode 
	 * @Description: 得到父类的对象
	 * @param menucode
	 * @return
	 * @return: UserFunction
	 * @author: 查恒 2016年11月7日 下午5:25:38 
	 */
	UserFunction getParFunByCode(String menucode);

	/** 
	 * @Title: loadChildMenuTree 
	 * @Description: 加载属于顶部功能的页面菜单
	 * @return
	 * @return: List<UserFunction>
	 * @author: 查恒 2016年11月9日 下午4:07:28 
	 */
	List<UserFunction> loadChildMenuTree(Company company,Role currentRole,Integer parentId);


    List<UserFunction> findAllFunc();
}

